#include "IR_Exit.h"

u16 IR_User = 0x00FF;//用户码
u16 i;

void Exti_Init(void)
{
	EXTI_InitTypeDef	Exti_InitStructure;					//结构定义

	Exti_InitStructure.EXTI_Interrupt = ENABLE;				//中断使能,   ENABLE或DISABLE
	Exti_InitStructure.EXTI_Mode      = EXT_MODE_Fall;		//中断模式,   EXT_MODE_RiseFall,EXT_MODE_Fall
	Exti_InitStructure.EXTI_Priority  = Priority_1;			//指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
	Ext_Inilize(EXT_INT0,&Exti_InitStructure);				//初始化

	Exti_InitStructure.EXTI_Interrupt = ENABLE;				//中断使能,   ENABLE或DISABLE
	Exti_InitStructure.EXTI_Mode      = EXT_MODE_Fall;		//中断模式,   EXT_MODE_RiseFall,EXT_MODE_Fall
	Exti_InitStructure.EXTI_Priority  = Priority_1;			//指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
	Ext_Inilize(EXT_INT1,&Exti_InitStructure);				//初始化

	Exti_InitStructure.EXTI_Interrupt = ENABLE;				//ÖÐ¶ÏÊ¹ÄÜ,   ENABLE»òDISABLE
	Ext_Inilize(EXT_INT2,&Exti_InitStructure);				//³õÊ¼»¯

	Exti_InitStructure.EXTI_Interrupt = ENABLE;				//ÖÐ¶ÏÊ¹ÄÜ,   ENABLE»òDISABLE
	Ext_Inilize(EXT_INT3,&Exti_InitStructure);				//³õÊ¼»¯	
}

void IR_Start(void)//完整发射起始信号
{
	IR_NEC=1;//使用的是NPN所以1是开，然后接收头便是低电平
	TI_Delay_us(9000);//9000us,低电平
	IR_NEC=0;
	TI_Delay_us(4500);//4500us,低电平
}

void IR_Continuous(void)//完整发射连续信号
{
	//使用的是NPN所以1是开，然后接收头便是低电平
	IR_NEC=1;//0
	TI_Delay_us(9000);//9000us,低电平
	IR_NEC=0;//1
	TI_Delay_us(2500);//4500us,低电平
	
	IR_NEC=1;//1
	Delay_ms(2);
	IR_NEC=0;//1
}

void IR_High(void)//完整发射高电平信号
{
	//使用的是NPN所以1是开，然后接收头便是低电平
	IR_NEC=1;//0
	TI_Delay_us(560);//9000us,低电平
	IR_NEC=0;//1
	TI_Delay_us(1690);//4500us,低电平		
}

void IR_LoW(void)//完整发射低电平信号
{
	//使用的是NPN所以1是开，然后接收头便是低电平
	IR_NEC=1;//0
	TI_Delay_us(560);//9000us,低电平
	IR_NEC=0;//1
	TI_Delay_us(560);//4500us,低电平		
}

void W_Data(u8 Data)//发送的一个一次NEC方波
{
	/*****关闭中断*************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
	EX0=0;
	EX1=0;
	INT_CLKO &= ~(1 << 4);
	INT_CLKO &= ~(1 << 5);

	/*开始发送信号*/	
	
	IR_Start();//发送起始信号
	for(i=0;i<16;i++)//发送用户码与反码组合
	{	
		if(IR_User & (0x0001<<i))	IR_High();
		else IR_LoW();
	}	
	for(i=0;i<8;i++)//发送数据码
	{	
		if(Data & (0x01<<i))	IR_High();
		else IR_LoW();
	}
	for(i=0;i<9;i++)//发送数据反码
	{	
		if(~Data & (0x01<<i))	IR_High();
		else IR_LoW();
	}
	Delay_ms(100);
	EX0=1;
	EX1=1;
	INT_CLKO &= (1 << 4);
	INT_CLKO &= (1 << 5);
}

